print("操作迭代对象的函数##################################################start")
import itertools

natuals = itertools.count(1)


# itertools会创建无限序列，无限序列只有在for迭代时才会无限地迭代下去
def natualsFution():
    global natuals
    for n in natuals:
        print(n)


# natualsFution()

# 无限序列虽然可以无限迭代下去，但是通常我们会通过takewhile()等函数根据条件判断来截取出一个有限的序列
def natualsFution2():
    ns = itertools.takewhile(lambda x: x <= 10, natuals)
    print(list(ns))


natualsFution2()

# chain()可以把一组迭代对象串联起来，形成一个更大的迭代器
for c in itertools.chain('ABC', 'XYZ'):
    print(c)
print(list(itertools.chain('ABC', 'XYZ')))

# groupby()把迭代器中相邻的重复元素挑出来放在一起
for key, group in itertools.groupby('AAABBBCCAAA'):
    print(key, list(group))
print("------------------------------------------------")
# 忽略大小写分组
for key, group in itertools.groupby('AaaBBbcCAAa', lambda key: key.upper()):
    print(key, list(group))
print("操作迭代对象的函数##################################################end\n")
